lexer grammar QTemplate;

@header {
package astudy.parser.sql;
}

AS : 'as' ;
ORDER : 'order' ;
BY : 'by' ;
ASC : 'asc' ;
DESC : 'desc' ;
FETCH : 'fetch' ;
FIRST : 'first' ;
FROM : 'from' ;
ROW : 'row' ;
ROWS : 'rows' ;
ONLY : 'only' ;
FOR : 'for' ;
UPDATE : 'update' ;
OF : 'of' ;
READ : 'read' ;
OPTIMIZE : 'optimize' ;
ALL : 'all' ;
WITH : 'with' ;
NC : 'nc' ;
UR : 'ur' ;
CS : 'cs' ;
KEEP : 'keep' ;
LOCKS : 'locks' ;
RS : 'rs' ;
RR : 'rr' ;
SELECT : 'select' ;
UNION : 'union' ;
DISTINCT : 'distinct' ;
TABLE : 'table' ;
WHERE : 'where' ;
GROUP : 'group' ;
HAVING : 'having' ;
CROSS : 'cross' ;
JOIN : 'join' ;
INNER : 'inner' ;
LEFT : 'left' ;
RIGHT : 'right' ;
OUTER : 'outer' ;
EXCEPTION : 'exception' ;
ON : 'on' ;
NOT : 'not' ;
AND : 'and' ;
OR : 'or' ;
SOME : 'some' ;
ANY : 'any' ;
BETWEEN : 'between' ;
EXISTS : 'exists' ;
IN : 'in' ;
LIKE : 'like' ;
ESCAPE : 'escape' ;
IS : 'is' ;
NULL : 'null' ;
CONCAT : 'concat' ;
CASE : 'case' ;
WHEN : 'when' ;
THEN : 'then' ;
ELSE : 'else' ;
END : 'end' ;
CAST : 'cast' ;
T__123 : 'GRAPHIC_STRING' ;
T__124 : 'BINARY-STRING' ;
T__125 : 'DECIMAL_POINT' ;
T__126 : 'Delimiters' ;
T__127 : 'current date' ;

// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 135
COMMA		: ',' ;
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 136
DOUBLE_STAR 	: '**';	
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 137
STAR		: '*';
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 138
SEMICOLON		: ';' ;
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 139
LPAREN		: '(' ;
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 140
RPAREN		: ')' ;
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 141
EQ		: '=';
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 142
NE		: '<>'|'!=';
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 143
LE		: '<';
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 144
GT		: '>';
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 145
NL		: '>='|'!<';
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 146
NG		: '<='|'!>';
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 147
PLUS		: '+';
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 148
MINUS		: '-';
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 149
DOUBLE_BITWISEOR	: '||';
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 150
DIVIDE		: '/';
//UNDERLINE		: '_';

//numbers
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 154
fragment DIGIT	: '0'..'9' ;
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 155
INTEGER		: (DIGIT)*;	//do not care the sign: PLUS and MINUS. In parser, we will judge it.
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 156
DECIMAL		: INTEGER('.'(DIGIT)*)?;
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 157
FLOAT_POINT	: DECIMAL('E'(PLUS|MINUS)?INTEGER);
//DECIMAL_POINT	: 'ASDFGHJKL';

//strings
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 161
CHARACTER_STRING	: '\'' (~'\'')* '\'' ( '\'' (~'\'')* '\'' )*;
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 162
TABLE_COLUMNS	: ':'?('a'..'z'|'A'..'Z'|'#'|'@')('a'..'z'|'A'..'Z'|'0'..'9'|'#'|'@'|'_'|'.')*'.*';
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 163
IDENTIFIER		: ':'?('a'..'z'|'A'..'Z'|'#'|'@')('a'..'z'|'A'..'Z'|'0'..'9'|'#'|'@'|'_'|'.')*;

// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 165
WHITESPACE 	: ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ 	{ $channel = HIDDEN; } ;
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 166
SINGLELINE_COMMENT	: '--'( ~('\r' | '\n') )*		{ $channel = HIDDEN; } ;
// $ANTLR src "src/astudy/parser/sql/QTemplate.g" 167
MULTILINE_COMMENT	: '/*' (~'*')* '*' ('*' | ( ~('*' | '/') (~'*')* '*') )* '/'  	{ $channel = HIDDEN; } ;

// PARSER *********************************************************************************
// starting rule
